const path = require("path");
//安装 npm install --save-dev hard-source-webpack-plugin
const HardSourceWebpackPlugin = require("hard-source-webpack-plugin");
//DllPlugin插件能够快速打包，能把第三方依赖的文件能提前进行预编译打包到一个文件里面去。
//安装 npm install --save-dev autodll-webpack-plugin
const AutoDllPlugin = require("autodll-webpack-plugin");
const port = process.env.VUE_PORT || process.env.npm_config_port || 80 // 端口
const appBasePort = process.env.VUE_APP_BASE_PORT || 8080 // 后端端口

function resolve(dir) {
  return path.join(__dirname, dir);
}

module.exports = {

  // 部署生产环境和开发环境下的URL。
  // 默认情况下，Vue CLI 会假设你的应用是被部署在一个域名的根路径上
  //如果应用被部署在一个子路径上，你就需要用这个选项指定这个子路径。例如，如果你的应用被部署在 https://*****/admin/，则设置 baseUrl 为 /admin/。
  publicPath: process.env.NODE_ENV === "production" ? "./" : "/",
  // 用于放置生成的静态资源 (js、css、img、fonts) 的；（项目打包之后，静态资源会放在这个文件夹下）
  assetsDir: 'public',
  // 如果你不需要生产环境的 source map，可以将其设置为 false 以加速生产环境构建。
  productionSourceMap: false,
  // // 基本路径
  // baseUrl: '/',
  // 输出文件目录
  outputDir: 'dist',
  // eslint-loader 是否在保存的时候检查
  lintOnSave: true,
  // use the full build with in-browser compiler?
  // https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only
  compiler: false,
    // webpack-dev-server 相关配置
    devServer: {
      open: true,
      host: '0.0.0.0',
      port: port,
      overlay: {
        warning: false,
        errors: false
      },
      // proxy:`http://192.168.1.9:`+appBasePort+`/admin`,
      // 接口代理
      proxy: {
        [process.env.VUE_APP_BASE_API]: {
          target: `http://cangdu.org:8001`,
          // target: `http://feature.data-center.product.dev.deshuixx.com/admin`,
          changeOrigin: true,
          // pathRewrite: {
          //   ['^' + process.env.VUE_APP_BASE_API]: ''
          // },
          pathRewrite: (target, request) => {
            request.headers["client-request-uri"] = target;
            request.headers["X-Real-IP"] = request.connection.remoteAddress;
            return target.replace(new RegExp("^//elm.cangdu.org/"), "");
          },
         ws: true,
        disableHostCheck: true
        }
      }
    },
  // webpack配置
  // see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
  chainWebpack: config => {
    //svg
    const svgRule = config.module.rule("svg");
    svgRule.uses.clear();
    svgRule
      .test(/\.svg$/)
      .include.add(path.resolve(__dirname, "src/assets/icons"))
      .end()
      .use("svg-sprite-loader")
      .loader("svg-sprite-loader")
      .options({
        symbolId: "icon-[name]"
      });
    const fileRule = config.module.rule("file");
    fileRule.uses.clear();
    fileRule
      .test(/\.svg$/)
      .exclude.add(path.resolve(__dirname, "src/assets/icons"))
      .end()
      .use("file-loader")
      .loader("file-loader");
  },
  configureWebpack: config => {
    Object.assign(config, {
      resolve: {
        alias: {
        },
        extensions: ['.js', '.vue', '.json'] // 可以省略后缀名
      },
      externals: {
        './cptable': 'var cptable',
        globalConfig: "globalConfig"
      },
    });

    Object.assign(config.resolve.alias, {
      '@': resolve('src')
    });

    if (process.env.NODE_ENV !== "production") {
      config.plugins.push(
        new HardSourceWebpackPlugin(),
        new AutoDllPlugin({
          inject: true,
          debug: true,
          filename: "[name]_[hash].js",
          path: "./dll" + Date.parse(new Date().toString()),
          entry: {
            vendor_vue: ["vue", "vuex", "vue-router"],
            vendor_ui: ["vue-awesome-swiper"],
            vendor_tools: ["axios", "core-js"]
          }
        })
      );
    }
  },
  // vue-loader 配置项
  // https://vue-loader.vuejs.org/en/options.html
  vueLoader: {},
  // css相关配置
  css: {
    // 是否使用css分离插件 ExtractTextPlugin
    extract: true,
    // 开启 CSS source maps?
    sourceMap: false,
    // css预设器配置项
    loaderOptions: {},
    // 启用 CSS modules for all css / pre-processor files.
    modules: false
  },
  // use thread-loader for babel & TS in production build
  // enabled by default if the machine has more than 1 cores
  parallel: require('os').cpus().length > 1,
  // 是否启用dll
  // See https://github.com/vuejs/vue-cli/blob/dev/docs/cli-service.md#dll-mode
  dll: false,
  // PWA 插件相关配置
  // see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa
  pwa: {},

  // 第三方插件配置
  pluginOptions: {
    // ...
  }
}